루아로 디버그 컨트롤러 만들었던 것이다.
모양은 좀 빠지지만 http uri 컨틀로러 역할을 수행한다.
더 면밀히 신경쓰지 않으면 인젝션 해킹등의 위험성은 있다. 예외처리도 없지만 이렇게도 구성할 수 있다는 것.
그 옛날 web2py나 스트럿츠 생각도 나고, C언어에서 CLI 를 짤 때에는 메시지 루프의 콜백 함수를 늘어놓고 연결하기도 했다. C 언어에 본격적으로 하자면 해시맵을 구현하고 명령어를 바로 인덱싱해서 콜백함수를 연결해야 하지만 보통은 귀찮아서 명령어 파싱 모듈만 따로 만든다.
func_map = { ['bestcates'] = bestcates,
['bestcates_random'] = bestcates_random,
['cate_best_prod'] = cate_best_prod,
['coldstart'] = coldstart,
['reco'] = reco,
['cohort_cate'] = cohort_cate,
['kwd'] = kwd,
['me'] = me,
['me2'] = me2,
['kwd_me'] = kwd_me,
}
function debug()
local dm = os.getenv('debug_mode')
if dm == nil then
ngx.exit(404)
end
local pre_uri = '/ppp/v5/debug/'
local cmd = string.sub(ngx.var.uri, string.len(pre_uri) + 1, string.len(ngx.var.uri))
ngx.log(ngx.DEBUG, ngx.var.uri)
ngx.log(ngx.DEBUG, cmd)
bl.get_redis()
if func_map[cmd] == nil then
res = {}
for my_cmd, _ in pairs(func_map) do
res[my_cmd] = ngx.var.scheme.."://".. ngx.var.http_host .. pre_uri .. my_cmd
end
else
global_debug = true
res = func_map[cmd]()
end
util.res_json(res)
end